iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
自我挑戰組

盯!視覺追蹤機器人 | ROS2打造追蹤機器人系列 第 3 篇

Day 3|機器人看到什麼?查看 ROS2 的相機資料

  • 分享至 

  • xImage
  •  

從概念進入實際操作

昨天先整理了 ROS2、TurtleBot3 與 Gazebo 之間的關係,也認識了 Node、Topic、Publisher 和 Subscriber。不過,知道 Topic 是資料傳遞的「頻道」之後,接下來還有一個很實際的問題:

機器人啟動後,我要怎麼知道有哪些頻道?又要去哪裡找到相機資料?

因為我的專題會用到視覺追蹤,所以今天先從終端機操作開始,查看系統中的 Node 與 Topic,找到之後程式要使用的影像資料通道。

啟動 TurtleBot3 + Gazebo

開發環境:Ubuntu 22.04、ROS2 Humble、TurtleBot3 Waffle 與 Gazebo Classic。

第一個終端機,載入 ROS2 環境:

source /opt/ros/humble/setup.bash

如果 TurtleBot3 套件是放在自己編譯的工作空間中,也需要接著載入該工作空間的 install/setup.bash,路徑依自己的安裝位置而定。

接著指定機器人型號,並啟動模擬環境:

export TURTLEBOT3_MODEL=waffle
ros2 launch turtlebot3_gazebo empty_world.launch.py

TURTLEBOT3_MODEL 用來指定要載入的機器人型號;這裡使用 waffle。

empty_world.launch.py 則會啟動空白世界,並載入 TurtleBot3。

等模擬環境完成載入後,先保留這個終端機繼續執行

相關啟動方式可以參考 ROBOTIS 官方模擬教學。

https://ithelp.ithome.com.tw/upload/images/20260917/20183482DnRQHFNEAC.png

第二個終端機查看Node、Topic:

source /opt/ros/humble/setup.bash

先載入環境如果有使用自己編譯的工作空間,這裡也依照前面的方式載入。

Node

ros2 node list

這個指令會列出目前 ROS 2 能發現的節點名稱。

在昨天把 Node 想成各自負責一項工作的功能單位,例如取得感測器資料、處理機器人狀態,或控制移動。啟動 TurtleBot3 的模擬環境時,背後也會有多個 Node 分工。

以下列出兩個可以留意的節點名稱示例,實際清單依套件版本與啟動設定而有所不同:

Node 名稱示例 主要工作
/robot_state_publisher 根據機器人模型與關節狀態,發布各部位之間的座標轉換關係
/turtlebot3_diff_drive 處理模擬機器人的輪子驅動,接收速度指令並發布里程計資訊

這裡我先認識與專題有關的功能就好。像是座標轉換、里程計的細節,之後實際用到時再慢慢補上。畫面上雖然只有一台機器人,背後其實有好幾個功能單位一起工作。

Topic

知道有哪些 Node 之後,接著查看它們使用的資料通道:

ros2 topic list

這個指令會列出目前 ROS 2 能發現的 Topic 名稱。如果沿用昨天「聊天室」的比喻,可以這樣記:

  • ros2 node list: 查看有哪些功能單位。
  • ros2 topic list: 查看有哪些用來交換訊息的頻道

在 TurtleBot3 模擬環境中,可以留意下面這幾種常見 Topic (仍以自己終端機列出的結果為準)。

Topic 名稱示例 資料用途
/camera/image_raw 相機的影像訊息
/cmd_vel 機器人的速度控制指令,例如前進速度與旋轉速度
/odom 里程計資訊,包含估計的位置、方向與速度
/scan 雷射掃描取得的距離資料

這些 Topic 和專題的不同部分有關。

例如,視覺處理程式需要相機影像;之後要控制機器人移動,則會接觸到速度指令。

找到相機資料 /camera/image_raw (重要)

在 Gazebo 視窗裡,我們可以從外部觀察機器人與場景;機器人相機的影像,則來自模擬相機本身的位置與朝向。

要讓之後的 Python 程式取得這些影像,就需要先找到對應的 Topic。

以下以 /camera/image_raw 為例,這個指令可以查看訊息型別、發布端數量與訂閱端數量:

ros2 topic info /camera/image_raw

這個指令可以查看訊息型別、發布端數量與訂閱端數量。

下面是 用來說明欄位的示例,數字會隨實際啟動的程式而改變:

Type: sensor_msgs/msg/Image
Publisher count: 1
Subscription count: 0

Publisher count: 1,表示目前發現一個發布端。在相機的情境裡,發布端負責把影像送到這個 Topic。在 Gazebo Classic 模擬中,這通常由相機相關的 ROS 插件處理。

這個數字可以幫助我們檢查資料來源是否存在;要確認影像是否持續傳來,還需要後續實際接收訊息。

Subscription count: 0,表示目前沒有發現訂閱這個 Topic 的接收端。

如果還沒啟動影像顯示工具或自己的視覺處理程式,出現 0 是可能的。

之後當程式建立了對這個 Topic 的訂閱,訂閱端數量就可能增加。

這也剛好接回昨天的概念: Publisher 負責發布資料,Subscriber 負責接收資料。

另外,這兩個欄位計算的是發布端與訂閱端的數量,不一定等於 Node 數量,因為一個 Node 可以建立多個發布端或訂閱端。

不同相機、模型或啟動設定,可能會使用不同的 Topic 名稱。如果清單中沒有 /camera/image_raw,可以先列出名稱與訊息型別:

ros2 topic list -t

留意其中型別為 sensor_msgs/msg/Image 的項目,再依名稱與相機設定,判斷哪個是要使用的影像通道。彩色影像與深度影像都可能使用這個型別,因此也要確認資料用途。

找到實際名稱後,把前面 ros2 topic info 指令中的 /camera/image_raw 換成自己的 Topic 名稱即可。

如果完全沒有相機相關項目,則先回頭確認模擬環境是否完成載入、使用的模型是否有相機,以及兩個終端機是否使用相同的 ROS 2 通訊環境。

重點整理

  • 使用 ros2 node list 查看目前有哪些節點。
  • 使用 ros2 topic list 查看目前有哪些資料通道。
  • 找到相機對應的 Topic。
  • 使用 ros2 topic info 判讀訊息型別、發布端與訂閱端數量。

NEXT

接下來會沿著找到的相機 Topic,嘗試接收影像並顯示畫面,看看機器人的相機視角,再逐步接到後續的視覺追蹤。

感謝以下參考來源

https://docs.robotis.com/docs/systems/turtlebot3/simulation/slam_simulation/#launch-simulation-world


上一篇
Day 2|機器人系統好複雜!一次搞懂 ROS2、TurtleBot3 與 Gazebo
下一篇
Day 4|「它」眼中的世界:打開 TurtleBot3 的相機視角
系列文
盯!視覺追蹤機器人 | ROS2打造追蹤機器人 共 12 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言